package com.fjwt.gz.service.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fjwt.gz.db.dto.AgentInfoDTO;
import com.fjwt.gz.db.dto.AgentLevelDTO;
import com.fjwt.gz.db.dto.AgentTreeDTO;
import com.fjwt.gz.db.dto.PointDTO;
import com.fjwt.gz.db.entity.AgentInfoEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fjwt.gz.db.vo.AgentDestroyVO;
import com.fjwt.gz.db.vo.AgentInfoVO;
import com.fjwt.gz.db.vo.FansSourceAgentVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 代理商信息表 Mapper 接口
 * </p>
 *
 * @author shiyonghao
 * @since 2025-04-09
 */
public interface AgentInfoMapper extends BaseMapper<AgentInfoEntity> {

    IPage<AgentInfoVO> page(IPage iPage, @Param("agentInfoDTO") AgentInfoDTO agentInfoDTO);

    List<AgentInfoVO> list(@Param("agentInfoDTO") AgentInfoDTO agentInfoDTO);

    /**
     * 用户绑定机构网点查询
     */
    FansSourceAgentVO fansBindAgent(@Param(value = "agentNo") String agentNo, @Param("level") Integer level, @Param("lng") String lng, @Param("lat") String lat);


    /**
     * 根据机构编号查询机构树
     */
    List<AgentTreeDTO> findByOrgId(@Param("agentNo") String agentNo);

    List<AgentTreeDTO> findAllOrgByOrgState();
    List<AgentTreeDTO> findAllOrg();
    List<AgentTreeDTO> findByOrgLevelAAndOrgState(@Param("orgLevel")String orgLevel);
    List<AgentTreeDTO> findByOrgLevel(@Param("orgLevel")String orgLevel);

    /**实物奖品导航至使用机构的机构列表**/
    IPage<AgentDestroyVO> getNearAgentList(@Param("page") IPage<?> page, @Param("location") PointDTO location,
                                           @Param("radius") String radius, @Param("agentNoList") List<String> agentNoList);



    /**
     * 实物奖品核销机构列表
     * @param iPage
     * @param goodsId
     * @param radius
     * @return
     */
    IPage<AgentDestroyVO> getAgentDestroyList(IPage iPage, @Param("location") PointDTO location,
                                              @Param("goodsId") Long goodsId, @Param("radius") String radius);

    /**
     * 获取可激活卡券的机构
     * @param iPage
     * @param couponId
     * @param radius
     * @return
     */
    IPage<AgentDestroyVO> getCouponAgentDestroyList(IPage iPage,@Param("location") PointDTO location, Long couponId, String radius);


    /**修改机构信息**/
    Integer updateAgemtInfoById(AgentInfoEntity agentInfoEntity);

    AgentInfoEntity getAgentInfoDetail(@Param("agentNo") String agentNo);

    AgentLevelDTO selectAgentLevel(@Param("agentNo")String agentNo);
}
